#ifndef SCENE_TYPES_H
#define SCENE_TYPES_H

#include "common.h"

// 触发方式枚举
typedef enum {
    TRIGGER_MODE_TIMER = 1,      // 定时触发
    TRIGGER_MODE_LINKAGE = 2,    // 联动触发（值触发）
    TRIGGER_MODE_MANUAL = 3      // 手动触发
} trigger_mode_t;

// 动作类型枚举
typedef enum {
    ACTION_TYPE_CONTROL = 0,     // 控制点
    ACTION_TYPE_NOTIFICATION = 1 // 仅通知
} action_type_t;

// 条件操作符枚举
typedef enum {
    CONDITION_OP_EQ,             // 等于
    CONDITION_OP_NE,             // 不等于  
    CONDITION_OP_GT,             // 大于
    CONDITION_OP_GE,             // 大于等于
    CONDITION_OP_LT,             // 小于
    CONDITION_OP_LE,             // 小于等于
    CONDITION_OP_CONTAINS,       // 包含
    CONDITION_OP_STARTS_WITH,    // 开头匹配
    CONDITION_OP_ENDS_WITH       // 结尾匹配
} condition_operator_t;

// 值触发条件
typedef struct {
    char *data_key;              // 监控的数据键
    condition_operator_t op;     // 操作符
    json_t *target_value;        // 目标值
    char *value_type;            // 值类型: "int", "float", "string", "bool"
} value_condition_t;

// 定时触发条件
typedef struct {
    char *cron_expression;       // cron表达式
    char *time_zone;             // 时区
} timer_condition_t;

// 控制动作
typedef struct {
    char *node;                  // 节点
    char *group;                 // 组
    char *tag;                   // 标签
    json_t *value;               // 控制值
    char *description;           // 动作描述
} control_action_t;

// 通知动作
typedef struct {
    char *method;                // 通知方式
    char *title;                 // 通知标题
    char *message;               // 通知内容
    json_t *config;              // 通知配置
} notification_action_t;

// 生效时间配置
typedef struct {
    char *start_time;            // 开始时间 "HH:MM"
    char *end_time;              // 结束时间 "HH:MM"
    int *weekdays;               // 生效星期 [1,2,3,4,5,6,7]
    size_t weekday_count;        // 星期数量
} effective_time_t;

// 场景状态枚举
typedef enum {
    SCENE_STATUS_INACTIVE,       // 未激活
    SCENE_STATUS_ACTIVE,         // 激活中
    SCENE_STATUS_EXECUTING,      // 执行中
    SCENE_STATUS_COMPLETED,      // 已完成
    SCENE_STATUS_FAILED          // 执行失败
} scene_status_t;

#endif
